package com.jacky.二叉树;

import java.util.ArrayList;
import java.util.List;

public class 二叉树的所有路径_257 {

    public List<String> binaryTreePaths(TreeNode root) {
        //如果根节点为null,就直接返回list
        if (root == null) new ArrayList();
        //定义一个返回值
        List<String> res = new ArrayList();
        //计算二叉树所有路径
        processBinaryTreePaths(root, "", res);
        return res;
    }

    /**
     * @param node 节点
     * @param path 二叉树中间路径
     * @param res  二叉树所有路径集合
     */
    public void processBinaryTreePaths(TreeNode node, String path, List<String> res) {
        //定义递归退出条件
        if (node == null) return;
        //定义一个StringBuffer来拼接二叉树路径
        StringBuffer buffer = new StringBuffer(path);
        //把二叉树路径值拼接进来
        buffer.append(Integer.toString(node.val));
        //如果已经递归到叶子节点，就把路径添加到res集合里面
        if (node.left == null && node.right == null) {
            res.add(buffer.toString());
        } else {
            //如果非叶子节点就拼接一个"->"符号
            buffer.append("->");
            //递归左子树，带上中间拼接好的路径
            processBinaryTreePaths(node.left, buffer.toString(), res);
            //递归右子树，带上中间拼接好的路径
            processBinaryTreePaths(node.right, buffer.toString(), res);
        }
    }
}
